// 6.1. 修饰符类型-数据类型修饰符
/**
 * C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义，所以它更能满足各种情境的需求。

--------------------------
数据类型修饰符
下面列出了数据类型修饰符：

signed
unsigned
long
short
修饰符 signed、unsigned、long 和 short 可应用于整型，signed 和 unsigned 可应用于字符型，long 可应用于双精度型。

修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如：unsigned long int。

C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int，只写单词 unsigned、short 或 long，int 是隐含的。例如，下面的两个语句都声明了无符号整型变量。

unsigned x;
unsigned int y;
为了理解 C++ 解释有符号整数和无符号整数修饰符之间的差别，我们来运行一下下面这个短程序：
 * 
*/

#include <iostream>

int main(void)
{
  signed int num1 = -20;
  unsigned int num2 = 30;
  short int num3 = 2;
  long int num4 = 20000;

  signed char c1 = 'x';
  unsigned char c2 = 'y';

  long double d1 = 12.345;

  signed short int num5 = 22;
  unsigned long int num6 = 12345678;

  // 使用速记符号来定义无符号短整数和无符号长整数
  unsigned num7 = 222;
  unsigned short num8 = 234;
  unsigned long num9 = 2322222224;

  std::cout << "num1:\t" << num1 << '\n'
            << "num2:\t" << num2 << '\n'
            << "num3:\t" << num3 << '\n'
            << "num4:\t" << num4 << '\n'
            << "c1:\t" << c1 << '\n'
            << "c2:\t" << c2 << '\n'
            << "d1:\t" << d1 << '\n'
            << "num5:\t" << num5 << '\n'
            << "num6:\t" << num6 << '\n'
            << "num7:\t" << num7 << '\n'
            << "num8:\t" << num8 << '\n'
            << "num9:\t" << num9 << std::endl;

  // -----------有符号整数和无符号整数之间的差别--------------

  short int a;          // 	-32768 到 32767
  short unsigned int b; // 0 到 65,535

  b = 50000;
  a = b; // a : -15536 符号短整数 50,000 的位模式被解释为有符号短整数 -15,536。

  // b = a;

  std::cout << "a:" << a << '\n'       // -15536
            << "b:" << b << std::endl; // 50000
  printf("-------------end----------\n");
  return 0;
}